Auroraのインスタンスタイプ変更をフェイルオーバで行ってみた
はじめに
AWSチームのすずきです。
インスタンスタイプの変更が必要となったAmazon Aurora。 DBの停止時間を最小限にするため、リードレプリカの設置とフェイルオーバにより実施する機会がありました。 その内容を紹介させて頂きます。
手順
リードレプリカ作成
- 対象のDBを選択、リードレプリカを作成を指定します。
- 希望するインスタンスクラスを指定します。
- Writerノードの稼働AZの変更を避けるため、同一のAZを指定しました。
- 10〜15分程度でリードレプリカが利用可能となります。
フェイルオーバ操作
- 変更対象のWriterノードを選択し、「フェイルオーバー」を実施します。
- イベント情報でフェイルオーバの開始、完了は確認可能です。
DB停止時間の計測
- フェイルオーバ中のDB停止時間を求めるため、AuroraにDB接続し、現在時刻とDBステータス情報を取得するスクリプトを用意しました
- スクリプトを1秒毎に実行し、DB接続不能な時間を求めました。
スクリプト
DBENDPOINT='#####.cluster-#####.ap-northeast-1.rds.amazonaws.com' DBUSER='test####' for i in {0..900}; do echo 'SELECT CURTIME();\s' | mysql -h ${DBENDPOINT} -P 3306 -u ${DBUSER} >> $i.txt 2>&1 & sleep 1 done;
結果
- 今回のフェイルオーバ検証では、DB接続不能な時間は8秒以下でした。
停止直前
$ cat 22.txt CURTIME() 08:33:35
接続不能
$ cat 23.txt ERROR 2003 (HY000): Can't connect to MySQL server on 'test#######-1.cluster-cnaybbyalggi.ap-northeast-1.rds.amazonaws.com' (111)
接続再開
$ cat 29.txt CURTIME() 08:33:43
比較
- 比較のため、DB インスタンスの変更を「すぐに適用」とした場合のDB停止時間も同じスクリプトで測定しました。
- db.t2.smallからdb.t2.mediumの変更に伴うDB停止時間は、約7分でした。
停止直前
$ cat 116.txt CURTIME() 08:54:33
接続不能
$ cat 118.txt ERROR 2003 (HY000): Can't connect to MySQL server on 'test#######-1.cluster-cnaybbyalggi.ap-northeast-1.rds.amazonaws.com' (111)
接続再開
$ cat 541.txt CURTIME() 09:01:41
まとめ
Auroraのフェイルオーバーを利用する事で、RDSのインスタンスタイプの変更を 短時間で実施できる事が確認できました。
DBの変更作業はシステム影響の少ない深夜、メンテナンスウィンドウを利用して行う事が望ましいですが、 Amazon Auroraの緊急変更が必要となった場合、今回紹介させて頂いた手順をお試しください。